Password Hashing এবং Authentication

Web Development - কোডইগনাইটার (Codeigniter) - CodeIgniter এর সিকিউরিটি |

CodeIgniter-এ Password Hashing এবং Authentication নিরাপত্তার গুরুত্বপূর্ণ দিক। Password Hashing নিশ্চিত করে যে ব্যবহারকারীর পাসওয়ার্ড প্লেইন টেক্সটে সংরক্ষিত না হয়ে hashed আকারে রাখা হয়, যা নিরাপত্তা বাড়ায়। Authentication ব্যবহারকারীর পরিচয় যাচাই করার প্রক্রিয়া, যাতে শুধুমাত্র অনুমোদিত ব্যবহারকারীরা অ্যাপ্লিকেশনে প্রবেশ করতে পারে।

Password Hashing

পাসওয়ার্ড হ্যাশিং একটি নিরাপত্তা প্রক্রিয়া, যেখানে পাসওয়ার্ডকে একটি একমুখী ফাংশন দিয়ে হ্যাশ করা হয় এবং এটি ডেটাবেসে সংরক্ষণ করা হয়। যখন ব্যবহারকারী লগইন করতে চেষ্টা করেন, তখন তাদের প্রদত্ত পাসওয়ার্ডকে হ্যাশ করা পাসওয়ার্ডের সাথে তুলনা করা হয়।


CodeIgniter-এ Password Hashing

১. Password Hashing তৈরি

CodeIgniter 4 এ Password হ্যাশিং করতে password_hash() এবং password_verify() ফাংশন ব্যবহার করা হয়।

১.১. পাসওয়ার্ড হ্যাশিং এবং সঞ্চয়
namespace App\Controllers;

use CodeIgniter\Controller;

class AuthController extends Controller {
    
    public function register() {
        // ফর্ম ডেটা
        $password = $this->request->getPost('password');

        // পাসওয়ার্ড হ্যাশিং
        $hashedPassword = password_hash($password, PASSWORD_DEFAULT);

        // ডাটাবেসে হ্যাশড পাসওয়ার্ড সংরক্ষণ করুন
        $data = [
            'username' => $this->request->getPost('username'),
            'email'    => $this->request->getPost('email'),
            'password' => $hashedPassword
        ];

        // ডাটাবেসে ডেটা ইনসার্ট করুন
        // Assume you have a model for users
        $userModel = new \App\Models\UserModel();
        $userModel->save($data);

        return redirect()->to('login'); // অথবা Success Page
    }
}
  • password_hash($password, PASSWORD_DEFAULT): এটি একটি নিরাপদ হ্যাশ (যেমন bcrypt) তৈরি করবে, যা পাসওয়ার্ডকে নিরাপদে সংরক্ষণ করবে।
  • PASSWORD_DEFAULT: এটি bcrypt অথবা অন্য উন্নত পদ্ধতিতে পাসওয়ার্ড হ্যাশ করবে।
১.২. পাসওয়ার্ড যাচাই করা

লগইন করার সময়, ব্যবহারকারীর ইনপুট করা পাসওয়ার্ড যাচাই করার জন্য password_verify() ফাংশন ব্যবহার করা হয়।

public function login() {
    // ইনপুট ডেটা
    $email = $this->request->getPost('email');
    $password = $this->request->getPost('password');
    
    // ব্যবহারকারী ডেটা প্রাপ্তি
    $userModel = new \App\Models\UserModel();
    $user = $userModel->where('email', $email)->first();

    // পাসওয়ার্ড যাচাই
    if ($user && password_verify($password, $user['password'])) {
        // লগইন সফল
        session()->set('user_id', $user['id']);
        return redirect()->to('dashboard'); // ড্যাশবোর্ডে রিডাইরেক্ট করুন
    } else {
        // লগইন ব্যর্থ
        return redirect()->to('login')->with('error', 'Invalid credentials');
    }
}
  • password_verify($password, $hashedPassword): এটি ব্যবহারকারীর ইনপুট করা পাসওয়ার্ড এবং ডাটাবেসে সংরক্ষিত হ্যাশড পাসওয়ার্ডের সাথে তুলনা করবে।

Authentication

Authentication হল ব্যবহারকারীর পরিচয় যাচাই করার প্রক্রিয়া, যেখানে পাসওয়ার্ড হ্যাশিং ব্যবহৃত হয়। লগইন এবং সেশন ব্যবস্থাপনা এই প্রক্রিয়ার অন্তর্ভুক্ত।

২. Session Management

CodeIgniter সেশন পরিচালনার জন্য বিল্ট-ইন সেশন লাইব্রেরি সরবরাহ করে। সেশন ব্যবহার করে আপনি লগইন করা ব্যবহারকারীকে ট্র্যাক করতে পারেন।

২.১. সেশন শুরু করা
namespace App\Controllers;

use CodeIgniter\Controller;

class AuthController extends Controller {
    
    public function login() {
        // ফর্ম ডেটা
        $email = $this->request->getPost('email');
        $password = $this->request->getPost('password');
        
        // ব্যবহারকারী ডেটা প্রাপ্তি
        $userModel = new \App\Models\UserModel();
        $user = $userModel->where('email', $email)->first();

        // পাসওয়ার্ড যাচাই
        if ($user && password_verify($password, $user['password'])) {
            // সেশন সেট করা
            session()->set('user_id', $user['id']);
            session()->set('username', $user['username']);
            return redirect()->to('dashboard'); // ড্যাশবোর্ডে রিডাইরেক্ট করুন
        } else {
            return redirect()->to('login')->with('error', 'Invalid credentials');
        }
    }
    
    public function logout() {
        // সেশন ডেস্ট্রয় করা
        session()->destroy();
        return redirect()->to('login'); // লগইন পেজে রিডাইরেক্ট
    }
}
  • session()->set(): সেশন ডেটা সেট করে।
  • session()->destroy(): সেশন মুছে দেয়।
২.২. সেশন যাচাই

লগইন করা ব্যবহারকারীর প্রমাণীকরণ যাচাই করতে, আপনি সেশন ডেটা ব্যবহার করতে পারেন:

public function dashboard() {
    if (!session()->has('user_id')) {
        return redirect()->to('login'); // যদি সেশন না থাকে, লগইন পেজে রিডাইরেক্ট
    }
    // ড্যাশবোর্ড কনটেন্ট দেখান
    return view('dashboard');
}

Authorization

Authorization হল একটি ব্যবহারকারী কোন বিশেষ ভূমিকা বা অনুমতি পায় তা যাচাই করা। যেমন, কিছু পেজ শুধুমাত্র প্রশাসকরা অ্যাক্সেস করতে পারবে।

public function adminDashboard() {
    if (!session()->has('user_id') || session()->get('role') !== 'admin') {
        return redirect()->to('login'); // প্রশাসক ছাড়া অন্য কেউ অ্যাক্সেস করতে পারবে না
    }
    return view('admin_dashboard');
}

এখানে, role সেশন ভেরিয়েবলের মাধ্যমে একজন ব্যবহারকারী প্রশাসক কিনা তা যাচাই করা হয়।


CodeIgniter এ Password Hashing এবং Authentication সেরা প্র্যাকটিস

  1. পাসওয়ার্ড হ্যাশিং ব্যবহার করুন: কখনোই পাসওয়ার্ড প্লেইন টেক্সটে সংরক্ষণ করবেন না। password_hash() এবং password_verify() ব্যবহার করুন।
  2. সেশন সুরক্ষা: ব্যবহারকারীর সেশন সুরক্ষিত রাখার জন্য CodeIgniter এর সেশন লাইব্রেরি ব্যবহার করুন। সেশন লাইফটাইম এবং সিকিউরিটি সেটিংস কনফিগার করুন।
  3. Role-based Authorization: ব্যবহারকারীর ভূমিকা যাচাই করতে role-based authorization ব্যবহার করুন, যাতে আপনি নির্দিষ্ট রিসোর্স কেবল নির্দিষ্ট ভূমিকা বা অনুমতি পেয়েছেন এমন ব্যবহারকারীদের জন্য অ্যাক্সেস করতে পারেন।
  4. এলার্টস ব্যবহার করুন: লগইন এবং রেজিস্ট্রেশন ফর্মে এলার্ট ব্যবহার করে ব্যবহারকারীকে সফল বা ব্যর্থ লগইন বার্তা দেখান।

সারাংশ

CodeIgniter এ Password Hashing এবং Authentication নিরাপত্তা এবং প্রমাণীকরণ ব্যবস্থাপনার জন্য গুরুত্বপূর্ণ দুটি উপাদান। পাসওয়ার্ড হ্যাশিংয়ের মাধ্যমে আপনি নিরাপদভাবে পাসওয়ার্ড সংরক্ষণ করতে পারেন এবং সেশন ম্যানেজমেন্ট এবং role-based authorization এর মাধ্যমে ব্যবহারকারীর প্রমাণীকরণ এবং অনুমতি যাচাই করতে পারেন।

Content added By
Promotion